package com.asiainfo.news;

import cn.edu.hfut.dmic.contentextractor.ContentExtractor;
import cn.edu.hfut.dmic.contentextractor.News;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
/**
 * Created by Administrator on 2018/8/14 0014.
 */
public class NewsContentCrawlerImg {
    public static void main(String[] args) throws Exception {
        /*凤凰网新闻*/
//        String url = "https://news.ifeng.com/c/8EkXLJoCwDu";
//        String url = "https://www.sohu.com/a/408404699_115438?spm=smpc.author.fd-d.40.1648452128357Raslf0Y";
        String url = "https://www.sohu.com/a/408149269_115438";

        /*
         * getNewsByHtml 方法内部在获取 标题、时间等内容时如果错误则内部抛异常
         * 对于新闻内容是 js 动态生成时，即页面右击 查看源码 不能看到爬取的内容时，则 ContentExtractor 方法也无能为力
         *
         * ContentExtractor 内容提取器重载了4个方法 获取 News 对象
         * getNewsByUrl(String url)：输入URL，获取结构化新闻信息-------常用的方式
         * getNewsByDoc(Document doc)：输入Jsoup的Document，获取结构化新闻信息
         * getNewsByHtml(String html)：输入HTML，获取结构化新闻信息
         * getNewsByHtml(String html, String url)：输入HTML和URL，获取结构化新闻信息
         *
         */
        News news = ContentExtractor.getNewsByUrl(url);
        System.out.println("爬取网址：" + news.getUrl());
        System.out.println("发布时间：" + news.getTime());
        System.out.println("文章标题：" + news.getTitle());
        System.out.println("文章内容：" + news.getContent());

        /*
         * news.getContentElement() 返回的是正文所在的标签元素
         */
        Element contentElement = news.getContentElement();
        System.out.println("正文内容标签：" + contentElement.tagName());
        System.out.println("正文内容标签样式：" + contentElement.className());

        /** 根据标签名递归查询正文下的图片标签
         * 同理可以获取正文标签下其它任意想要获取的内容*/
        Elements elements = contentElement.getElementsByTag("img");
        if (elements != null && elements.size() > 0) {
            Element loopElement = null;
            for (int i = 0; i < elements.size(); i++) {
                loopElement = elements.get(i);
                System.out.println("图片地址：" + loopElement.attr("src"));
            }
        }
    }
}
